package com.relytosoft.mizar.media.analyze.services.service.face.impl;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.relytosoft.dubhe.common.core.base.page.PageQuery;
import com.relytosoft.dubhe.common.core.exception.ServiceException;
import com.relytosoft.dubhe.common.core.object.ResponseResult;
import com.relytosoft.dubhe.common.core.utils.BeanCopyUtils;
import com.relytosoft.dubhe.common.redis.utils.RedisUtil;
import com.relytosoft.mizar.media.analyze.api.entity.face.AyFaceDisposition;
import com.relytosoft.mizar.media.analyze.api.entity.system.AyPlanTemplate;
import com.relytosoft.mizar.media.analyze.api.pojo.dto.*;
import com.relytosoft.mizar.media.analyze.api.pojo.query.AyFaceSearchQuery;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyFaceDispositionVo;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyPlanTemplateVo;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.EsFaceVo;
import com.relytosoft.mizar.media.analyze.services.mapper.face.AyFaceDispositionMapper;
import com.relytosoft.mizar.media.analyze.services.service.face.AyFaceDispositionService;
import com.relytosoft.mizar.media.analyze.services.service.system.AyGroupBaseService;
import com.relytosoft.mizar.media.analyze.services.service.system.AyPlanTemplateService;
import com.relytosoft.mizar.media.analyze.services.utils.Base64Utils;
import com.relytosoft.mizar.media.camera.api.feign.CameraFeignInService;
import com.relytosoft.mizar.media.camera.api.pojo.vo.CameraBasePlatform;
import com.relytosoft.mizar.media.common.constant.AyCacheConstants;
import com.relytosoft.mizar.media.common.constant.MediaMqConstants;
import com.relytosoft.mizar.media.common.emqx.client.MqttOp;
import com.relytosoft.mizar.media.common.entity.algo.AYFace;
import com.relytosoft.mizar.media.common.entity.pojo.dto.FaceDispositionReqDto;
import com.relytosoft.mizar.media.common.entity.pojo.dto.FeatureExtractionReqDto;
import com.relytosoft.mizar.media.common.enums.AyFaceEnum;
import com.relytosoft.mizar.media.common.enums.DeleteStatusEnum;
import com.relytosoft.mizar.media.external.api.analyze.request.FaceCaptureDto;
import com.relytosoft.mizar.media.external.api.analyze.request.FaceObjectDto;
import com.relytosoft.mizar.media.external.api.analyze.service.FaceService;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;


/**
 * @author lj
 * @date 2022/5/16 12:00
 */
@Service
public class AyFaceDispositionServiceImpl extends ServiceImpl<AyFaceDispositionMapper, AyFaceDisposition> implements AyFaceDispositionService {

    @Resource
    @Lazy
    private AyGroupBaseService ayGroupBaseService;

    @Resource
    private AyPlanTemplateService ayPlanTemplateService;

    @Resource
    private CameraFeignInService cameraFeignInService;


    @Resource
    private FaceService faceService;

    @Override
    public IPage<AyFaceDisposition> selectAyFaceDispositionPageList(PageQuery pageQuery, AyFaceDisposition ayFaceDisposition) {
        if (StrUtil.isBlank(pageQuery.getOrderByColumn())) {
            pageQuery.setOrderByColumn("id");
            pageQuery.setIsAsc("desc");
        }
        return baseMapper.selectPageDispositionList(pageQuery.build(), ayFaceDisposition);
    }

    @Override
    public AyFaceDisposition addAyFaceDisposition(AyFaceDisposition ayFaceDisposition) {
        boolean save = this.save(ayFaceDisposition);
        if (save) {
            return ayFaceDisposition;
        }
        return null;
    }

    @Override
    public AyFaceDisposition getAyFaceDispositionInfo(AyFaceDispositionDto ayFaceDispositionDto) {
        //获取人脸布控信息
        AyFaceDisposition ayFaceDisposition = BeanCopyUtils.copy(ayFaceDispositionDto, AyFaceDisposition.class);
        //获取模板ID信息
        Integer planTemplateId = ayFaceDispositionDto.getPlanTemplateId();
        if (planTemplateId != null) {
            AyPlanTemplateDto planTemplateDto = getPlanTemplate(planTemplateId);
            if (planTemplateDto != null) {
                ayFaceDisposition.setPlanType(planTemplateDto.getPlanType());
                ayFaceDisposition.setPlanInfoNum(planTemplateDto.getPlanInfoNum());
                ayFaceDisposition.setPlanInfoList(planTemplateDto.getPlanInfoList());
            }
        }
        //获取需要添加布控任务得设备ID
        ayFaceDisposition.setStatus(0);
        ayFaceDisposition.setDefenseStatus(0);
        ayFaceDisposition.setDispositionId(UUID.randomUUID().toString());

        //判断类型
        if (AyFaceEnum.TUPIAN.getCode().equals(ayFaceDispositionDto.getDispositionType())) {
            //获取特征值,
            AYFace ayFace = getAyFace(ayFaceDispositionDto.getImageUrl());
            //存特征值
            ayFaceDisposition.setDispositionImage(ayFace.getFeature());
        }
        return ayFaceDisposition;
    }

    private AYFace getAyFace(String imageUrl) {
        FeatureExtractionReqDto featureExtractionReqDto = new FeatureExtractionReqDto();
        featureExtractionReqDto.setImageData(Base64Utils.picToBase64(imageUrl));
        ResponseResult result = faceService.featureExtraction(featureExtractionReqDto);
        return (AYFace) result.getData();
    }


    @Override
    public AyFaceDispositionVo selectAyFaceDispositionById(Integer faceDispositionId) {
        AyFaceDisposition ayFaceDisposition = this.getById(faceDispositionId);
        return BeanCopyUtils.copy(ayFaceDisposition, AyFaceDispositionVo.class);
    }


    @Override
    public boolean updateAyFaceDisposition(AyFaceDispositionDto ayFaceDispositionDto) {
        //查询原来数据的状态信息
        AyFaceDisposition disposition = this.getById(ayFaceDispositionDto.getId());
        //当布控状态为未开始或已结束或异常
        if (disposition.getStatus() != 1) {
            AyFaceDisposition ayFaceDisposition = BeanCopyUtils.copy(ayFaceDispositionDto, AyFaceDisposition.class);
            if (disposition.getDispositionType().equals(AyFaceEnum.TUPIAN.getCode())
                    && !disposition.getImageUrl().equals(ayFaceDispositionDto.getImageUrl())) {
                AYFace ayFace = getAyFace(ayFaceDispositionDto.getImageUrl());
                ayFaceDisposition.setDispositionImage(ayFace.getFeature());
            } else {
                if (!StrUtil.isEmptyIfStr(disposition.getDispositionImage())) {
                    ayFaceDisposition.setDispositionImage(disposition.getDispositionImage());
                }
            }
            //如果模板为空直接添加
            if (ayFaceDispositionDto.getPlanTemplateId() != null) {
                getUpdateAyFaceDispositionInfo(ayFaceDispositionDto, ayFaceDisposition);
            }
            //2. 删除比特大陆布控任务
            sendToDeleteToKafka(disposition.getDispositionId());
            sendCreateMsg(ayFaceDisposition);
            //更新本库数据信息
            return this.updateById(ayFaceDisposition);
        }
        return false;
    }


    /**
     * 设置模板信息
     *
     * @param ayFaceDispositionDto 修改模板信息
     */
    private void getUpdateAyFaceDispositionInfo(AyFaceDispositionDto ayFaceDispositionDto, AyFaceDisposition ayFaceDisposition) {
        //获取计划模板信息
        AyPlanTemplateDto planTemplate = getPlanTemplate(ayFaceDispositionDto.getPlanTemplateId());
        //设置必要参数
        ayFaceDisposition.setDispositionRangeDevice(ayFaceDispositionDto.getDispositionRangeDevice());
        ayFaceDisposition.setPlanType(planTemplate.getPlanType());
        ayFaceDisposition.setPlanInfoNum(planTemplate.getPlanInfoNum());
        ayFaceDisposition.setPlanInfoList(planTemplate.getPlanInfoList());
    }

    /**
     * 远程查询模板信息
     *
     * @param planTemplateId 计划模板ID
     * @return AyPlanTemplateDto
     */
    private AyPlanTemplateDto getPlanTemplate(Integer planTemplateId) {
        AyPlanTemplateVo ayPlanTemplateVo = ayPlanTemplateService.selectAyPlanTemplateById(planTemplateId);
        return BeanCopyUtils.copy(ayPlanTemplateVo, AyPlanTemplateDto.class);
    }


    @Override
    public Map<Integer, String> removeAyFaceDisposition(List<Integer> faceDispositionIds) {
        //1. 判断是否为已停止和撤防状态
        List<AyFaceDisposition> list = this.listByIds(faceDispositionIds);
        Map<Integer, String> map = new HashMap<>(66);
        //筛选出可删除
        Set<Integer> set = list.stream().filter(item -> {
            if (item.getStatus() != 1 && item.getDefenseStatus() == 0) {
                return true;
            } else {
                map.put(item.getId(), item.getName() + "-处于未停止未撤防状态不能删除");
                return false;
            }
        }).map(AyFaceDisposition::getId).collect(Collectors.toSet());
        //获取ID和比特大陆布控ID映射关系
        Map<Integer, String> idAndDispositionId = list.stream().collect(Collectors.toMap(AyFaceDisposition::getId,
                AyFaceDisposition::getDispositionId));
        //发送删除消息到kafka
        set.forEach(id -> sendToDeleteToKafka(idAndDispositionId.get(id)));
        //删除
        this.removeBatchByIds(set);
        //处于布防或布控状态不能删除
        return map;
    }

    /**
     * 相当于删除比特大陆原来的任务 创建一个新任务
     *
     * @param id 需要开始的的任务id
     * @return 是否成功
     */
    @Override
    public String startTask(Integer id) {
        //1. 查询布控任务信息
        AyFaceDisposition ayFaceDisposition = this.getById(id);
        //2.判断布控任务状态
        if (ayFaceDisposition.getStatus() != 1) {
            //删除任务
            sendToDeleteToKafka(ayFaceDisposition.getDispositionId());
            //在创建任务
            sendCreateMsg(ayFaceDisposition);
            return "启动成功";
        }
        if (ayFaceDisposition.getStatus() == 1) {
            return "任务正常运行中无需启动";
        }
        if (ayFaceDisposition.getStatus() == 3) {
            return "任务运行异常，请联系管理员";
        }
        return "启动任务失败";
    }

    /**
     * 相当于删除比特大陆的任务
     *
     * @param id 需要停止的任务id
     */
    @Override
    public boolean stopTask(Integer id) {
        //1. 查询布控任务信息
        AyFaceDisposition ayFaceDisposition = this.getById(id);

        if (ayFaceDisposition == null) {
            throw new ServiceException("任务不存在");
        }
        //2.判断布控任务状态
        if (ayFaceDisposition.getStatus() == 1) {
            //发送删除的消息
            sendToDeleteToKafka(ayFaceDisposition.getDispositionId());
            ayFaceDisposition.setDefenseStatus(0);
            ayFaceDisposition.setStatus(2);
            ayFaceDisposition.setEndTime(LocalDateTime.now());
            return this.updateById(ayFaceDisposition);
        } else {
            return false;
        }
    }

    @Override
    public boolean armedAndDisarmed(List<Integer> list) {
        List<AyFaceDisposition> ayFaceDispositions = this.listByIds(list);
        ayFaceDispositions.forEach(item -> {
            item.setDefenseStatus(item.getDefenseStatus() == 0 ? 1 : 0);
            //更新redis布防撤防信息
            RedisUtil.set(AyCacheConstants.CONTROL_FACE_CONDITION + item.getDispositionId(), JSON.toJSONString(item));
        });
        return this.updateBatchById(ayFaceDispositions);
    }

    @Override
    public JSONObject faceSearch(SearchFaceCaptureDto searchFaceCaptureDto, AyFaceSearchQuery ayFaceSearchQuery) {
        FaceCaptureDto captureDto = BeanCopyUtils.copy(searchFaceCaptureDto, FaceCaptureDto.class);
        captureDto.setTaskType(1);
        if (!StrUtil.isEmptyIfStr(searchFaceCaptureDto.getDeviceIds())) {
            captureDto.setDeviceIds(
                    Arrays.asList(searchFaceCaptureDto.getDeviceIds().split(",")));
        }
        if (!StrUtil.isEmptyIfStr(searchFaceCaptureDto.getTaskIds())) {
            captureDto.setTaskIds(
                    Arrays.asList(searchFaceCaptureDto.getTaskIds().split(",")));
        }
        FaceObjectDto faceObjectDto = new FaceObjectDto();
        if (!StrUtil.isEmptyIfStr(ayFaceSearchQuery.getAge())) {
            faceObjectDto.setAge(ayFaceSearchQuery.getAge());
        }
        if (!StrUtil.isEmptyIfStr(ayFaceSearchQuery.getSex())) {
            faceObjectDto.setGenderCode(ayFaceSearchQuery.getSex());
        }
        if (!StrUtil.isEmptyIfStr(ayFaceSearchQuery.getGlasses())) {
            faceObjectDto.setGlassExtend(ayFaceSearchQuery.getGlasses());
        }
        if (!StrUtil.isEmptyIfStr(ayFaceSearchQuery.getSmile())) {
            faceObjectDto.setSmile(ayFaceSearchQuery.getSmile());
        }
        if (!StrUtil.isEmptyIfStr(ayFaceSearchQuery.getSunglasses())) {
            faceObjectDto.setSunGlassExtend(ayFaceSearchQuery.getSunglasses());
        }
        captureDto.setFaceObjectDto(faceObjectDto);
        ResponseResult result = faceService.searchFaceData(captureDto);
        JSONObject jsonObject = JSONObject.parseObject(result.getData().toString());
        List<EsFaceVo> esFaceVos = faceApplicationSearch(jsonObject);
        jsonObject.put("Items", esFaceVos);
        return jsonObject;
    }

    @Override
    public boolean addTempFace(AyFaceDispositionDto ayFaceDispositionDto) {
        //查询
        AyFaceDisposition ayFaceDisposition = this.getById(ayFaceDispositionDto.getId());
        //设置临时人脸输出
        if (ayFaceDisposition.getAlarmType() == 0) {
            ayFaceDisposition.setTempFaceGroup(ayFaceDispositionDto.getTempFaceGroup());
            ayFaceDisposition.setTempBeginTime(getTime(ayFaceDispositionDto.getTempBeginTime()));
            ayFaceDisposition.setTempEndTime(getTime(ayFaceDispositionDto.getTempEndTime()));
            //更新数据库
            boolean update = this.updateById(ayFaceDisposition);
            if (update) {
                //发送删除
                sendToDeleteToKafka(ayFaceDisposition.getDispositionRangeDevice());
                //新建
                sendCreateMsg(ayFaceDisposition);
            }
            return update;
        }
        return false;
    }


    @Override
    public Integer selectDispositionByGroupId(String groupId) {
        LambdaQueryWrapper<AyFaceDisposition> wrapper = new QueryWrapper<AyFaceDisposition>().lambda();
        wrapper
                .eq(AyFaceDisposition::getDispositionType, AyFaceEnum.TIAOJIAN.getCode())
                .eq(AyFaceDisposition::getStatus, 1)
                .and(item -> item
                        .like(!StrUtil.isEmptyIfStr(groupId), AyFaceDisposition::getFaceGroup, groupId)
                        .or()
                        .like(!StrUtil.isEmptyIfStr(groupId), AyFaceDisposition::getTempFaceGroup, groupId));
        List<AyFaceDisposition> ayFaceDispositions = this.list(wrapper);
        return ayFaceDispositions.size();
    }

    @Override
    public boolean addFaceDispositionPlan(AyFaceDispositionPlanDto ayFaceDispositionPlanDto) {
        //根据id批量查询布控任务
        List<AyFaceDisposition> ayFaceDispositions = this.listByIds(ayFaceDispositionPlanDto.getFaceDispositionIds());
        //判断ayFaceDispositions是否为空
        if (ayFaceDispositions.isEmpty()) {
            throw new ServiceException("布控任务不存在");
        }
        //判断布控计划ID是否存在
        if (ayFaceDispositionPlanDto.getPlanTemplateId() != null) {
            //查询布控计划
            AyPlanTemplate ayPlanTemplate = ayPlanTemplateService.getById(ayFaceDispositionPlanDto.getPlanTemplateId());
            ayFaceDispositions.forEach(ayFaceDisposition -> {
                //设置数据
                ayFaceDisposition.setPlanInfoList(ayPlanTemplate.getPlanInfoList());
                ayFaceDisposition.setPlanType(ayPlanTemplate.getPlanType());
                ayFaceDisposition.setPlanInfoNum(ayPlanTemplate.getPlanInfoNum());
            });
        } else {
            ayFaceDispositions.forEach(ayFaceDisposition -> {
                //设置数据
                ayFaceDisposition.setPlanInfoList(ayFaceDispositionPlanDto.getPlanInfoList());
                ayFaceDisposition.setPlanType(ayFaceDispositionPlanDto.getPlanType());
                ayFaceDisposition.setPlanInfoNum(ayFaceDispositionPlanDto.getPlanInfoNum());
            });
        }
        boolean isSuccess = this.updateBatchById(ayFaceDispositions);
        if (isSuccess) {
            //添加到redis
            ayFaceDispositions.forEach(ayFaceDisposition -> {
                updateRedisInfo(
                        ayFaceDisposition.getDispositionId(),
                        ayFaceDisposition.getPlanType(),
                        ayFaceDisposition.getPlanInfoNum(),
                        ayFaceDisposition.getPlanInfoList());
            });
        }
        return isSuccess;
    }

    @Override
    public boolean removeFaceDispositionPlan(List<Integer> faceDispositionIds) {
        //根据id批量查询布控任务
        List<AyFaceDisposition> ayFaceDispositions = this.listByIds(faceDispositionIds);
        //判断ayFaceDispositions是否为空
        if (ayFaceDispositions.isEmpty()) {
            throw new ServiceException("布控任务不存在");
        }
        LambdaUpdateWrapper<AyFaceDisposition> wrapper = Wrappers.<AyFaceDisposition>lambdaUpdate()
                .set(AyFaceDisposition::getPlanInfoList, null)
                .set(AyFaceDisposition::getPlanType, null)
                .set(AyFaceDisposition::getPlanInfoNum, null)
                .in(AyFaceDisposition::getId, faceDispositionIds)
                .eq(AyFaceDisposition::getIsDelete, DeleteStatusEnum.NOT_DELETED.getValue());
        boolean update = this.update(wrapper);
        if (update) {
            //更新redis信息
            ayFaceDispositions.forEach(ayFaceDisposition -> {
                updateRedisInfo(
                        ayFaceDisposition.getDispositionId(),
                        null,
                        null,
                        null);
            });
        }
        return update;
    }

    private void updateRedisInfo(String dispositionId, Integer planType, Integer planInfoNum, String planInfoList) {
        //判断布控任务ID不为空，添加到redis
        if (dispositionId != null) {
            //查询redis数据，并更新
            String faceDispositionInfo = (String) RedisUtil.get(AyCacheConstants.CONTROL_FACE_CONDITION + dispositionId);
            JSONObject jsonObject = JSONObject.parseObject(faceDispositionInfo);
            jsonObject.put("planInfoList", planType);
            jsonObject.put("planType", planInfoNum);
            jsonObject.put("planInfoNum", planInfoList);
            RedisUtil.set(AyCacheConstants.CONTROL_FACE_CONDITION + dispositionId, jsonObject.toJSONString());
        }
    }

    public List<EsFaceVo> faceApplicationSearch(JSONObject jsonObject) {
        JSONArray items = jsonObject.getJSONArray("Items");
        if (items == null) {
            return new ArrayList<>();
        }
        List<EsFaceVo> esFaceVos = JSON.parseArray(items.toJSONString(), EsFaceVo.class);
        ResponseResult<List<CameraBasePlatform>> result = cameraFeignInService.findCameraCode("BTDL", 1);
        List<CameraBasePlatform> resultData = result.getData();
        //resultData转为map，键位platformCameraCode，值为name
        Map<String, String> cameraMap = resultData
                .stream()
                .collect(Collectors.toMap(CameraBasePlatform::getPlatformCameraCode, CameraBasePlatform::getName));
        esFaceVos.forEach(item -> {
            item.setDeviceName(cameraMap.get(item.getDeviceID()));
            item.setImage(getPicUrl(item.getImage()));
            item.setThumb(getPicUrl(item.getThumb()));
        });
        return esFaceVos;
    }

    public String getPicUrl(String url) {
        int http = url.lastIndexOf("http");
        return url.substring(http);
    }

    LocalDateTime getTime(String time) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
            date = dateFormat.parse(time);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        assert date != null;
        Instant instant = date.toInstant();
        ZoneId zoneId = ZoneId.systemDefault();
        return instant.atZone(zoneId).toLocalDateTime();
    }

    @Override
    public void sendCreateMsg(AyFaceDisposition ayFaceDisposition) {
        FaceDispositionReqDto faceDispositionReqDto = createDispositionReqDto(ayFaceDisposition);
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("OpType", "insertDisposition");
        jsonObject.put("Data", JSONObject.toJSONString(faceDispositionReqDto));
        //发送消息
        MqttOp.publish(MediaMqConstants.FACE_DISPOSITION_TOPIC, jsonObject.toJSONString());
    }


    public FaceDispositionReqDto createDispositionReqDto(AyFaceDisposition ayFaceDisposition) {
        //2. 设置添加任务必要参数
        FaceDispositionReqDto faceDispositionReqDto = new FaceDispositionReqDto();
        faceDispositionReqDto.setDeviceId(ayFaceDisposition.getDispositionRangeDevice());
        faceDispositionReqDto.setId(ayFaceDisposition.getId());
        // 人脸库布控
        if (ayFaceDisposition.getDispositionType().equals(AyFaceEnum.TIAOJIAN.getCode())) {
            faceDispositionReqDto.setType(AyFaceEnum.TIAOJIAN.getCode());
            //查询正常布控三方人脸库ID
            ArrayList<String> groupIds = getTripartiteLibraryId(ayFaceDisposition.getFaceGroup());
            if (groupIds.isEmpty()) {
                throw new ServiceException("未获取到三方设备信息");
            }
            //白名单布控
            if (ayFaceDisposition.getAlarmType() == 0) {
                int integer = Integer.parseInt(ayFaceDisposition.getThreshold());
                faceDispositionReqDto.setThreshold((double) (100 - integer));
                //判断是否临时人脸布控
                if (ayFaceDisposition.getTempFaceGroup() != null) {
                    ArrayList<String> tempGroupIds = getTripartiteLibraryId(ayFaceDisposition.getTempFaceGroup());
                    groupIds.addAll(tempGroupIds);
                }
            }
            //黑名单布控
            if (ayFaceDisposition.getAlarmType() == 1) {
                faceDispositionReqDto.setThreshold(Double.valueOf(ayFaceDisposition.getThreshold()));
            }
            faceDispositionReqDto.setGroupIds(groupIds);
        }

        //图片布控
        if (ayFaceDisposition.getDispositionType().equals(AyFaceEnum.TUPIAN.getCode())) {
            faceDispositionReqDto.setThreshold(Double.valueOf(ayFaceDisposition.getThreshold()));
            faceDispositionReqDto.setType(AyFaceEnum.TUPIAN.getCode());
            //设置特征值
            faceDispositionReqDto.setFeatureData(ayFaceDisposition.getDispositionImage());
        }
        return faceDispositionReqDto;
    }

    public void sendToDeleteToKafka(String dispositionId) {
        if (!StrUtil.isEmptyIfStr(dispositionId)) {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("OpType", "deleteDisposition");
            jsonObject.put("Data", dispositionId);
            MqttOp.publish(MediaMqConstants.FACE_DISPOSITION_TOPIC, JSON.toJSONString(jsonObject));
            RedisUtil.del(AyCacheConstants.CONTROL_FACE_CONDITION + dispositionId);
        } else {
            log.error("需要删除的三方布控任务ID不存在");
        }
    }


    /**
     * 获取三方库ID信息
     *
     * @param faceGroup 库
     * @return 需要布控的三方库ID
     */
    private ArrayList<String> getTripartiteLibraryId(String faceGroup) {
        //1. 逗号切割
        String[] split = faceGroup.split(",");
        //2. 转为integer
        List<Integer> list = Arrays.stream(split).map(Integer::valueOf).collect(Collectors.toList());
        //3. 查询自己数据库对应的三方库ID
        List<AyGroupBaseDto> ayGroupBaseDtoList = ayGroupBaseService.selectGroupByIds(list);
        return ayGroupBaseDtoList.stream().map(AyGroupBaseDto::getPlateformGroupId).collect(Collectors.toCollection(ArrayList::new));
    }
}